package com.hrms.hrms_security.utils;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;


import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class DateUtil {

    /**
     * 方法描述: 判断该日期是否是工作日
     * @param dateTime
     * @return: Boolean
     */
    public Boolean verdictIsWorkDay(String dateTime) {
        Boolean isWorkDay = false;
        //创建时间格式
        DateFormat fmt =new SimpleDateFormat("yyyy-MM-dd");
        String strDate = "";
        //如果dataTime不是空 则将该值转为date
        if(StringUtils.isNotEmpty(dateTime)){
            strDate = dateTime;
        }else{
            strDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        }
        //时间不能为空
        if(StringUtils.isNotEmpty(strDate)){
            //去假期补休数据库中查看是否有该天数据
            Map query = new HashMap<>(16);
            query.put("date", strDate);
            //queryDemo 根据时间匹配demo表中的date字段并且isDelete是未删除的的数据
            JSONArray demos = new JSONArray();
            //如果有今天的数据则判断holiday的值是否是false(true 是假期 false不是假期)
            if(demos.size() > 0){
                JSONObject demo = demos.getJSONObject(0);
                //如果holiday字段是false证明今天是工作日
                if("false".equals(demo.get("holiday").toString())){
                    isWorkDay = true;
                }
            }else{
                //没有数据则判断是星期几 周一到周五为工作日
                //如果只想根据周一到周五判断是不是工作日 只需要try里面的代码就行了
                try {
//                    String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
                    Calendar cal = Calendar.getInstance();
                    cal.setTime(fmt.parse(strDate));
                    int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
                    if (w < 0){
                        w = 0;
                    }
                    String weekDay = "1,2,3,4,5";
                    if(weekDay.indexOf(String.valueOf(w)) != -1){
                        isWorkDay = true;
                    }else{
                        isWorkDay = false;
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
        return isWorkDay;
    }
}
